//package com.utils.file;
//
//import com.aliyun.oss.ClientException;
//import com.aliyun.oss.OSSClient;
//import com.aliyun.oss.OSSException;
//import com.aliyun.oss.model.*;
//import com.mvasoft.common.utils.uuid.IdUtils;
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClientBuilder;
//import org.apache.poi.ss.usermodel.Workbook;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.activation.MimetypesFileTypeMap;
//import javax.annotation.PostConstruct;
//import java.io.*;
//import java.security.NoSuchAlgorithmException;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.List;
//
///**
// * 从云端上传下载查询删除文件
// *
// * @author andy
// */
//@Configuration
//public class AliyunFileUtil {
//    @Value("${oss.ossEndpoint}")
//    private String ossEndpointYml;
//    @Value("${oss.ossAccessId}")
//    private String ossAccessIdYml;
//    @Value("${oss.ossAccessKey}")
//    private String ossAccessKeyYml;
//    @Value("${oss.bucket}")
//    private String bucketYml;
//    private static String ossEndpoint;
//    private static String ossAccessId;
//    private static String ossAccessKey;
//    private static String bucket;
//
//    @PostConstruct
//    public void transValues() {
//        ossEndpoint = this.ossEndpointYml;
//        ossAccessId = this.ossAccessIdYml;
//        ossAccessKey = this.ossAccessKeyYml;
//        bucket = this.bucketYml;
//    }
//
//    /**
//     * 上传图片
//     * @param file
//     * @param path
//     * @return
//     * @throws IOException
//     * @throws NoSuchAlgorithmException
//     */
//    public static String upload(MultipartFile file, String path) throws IOException, NoSuchAlgorithmException {
//        String inputFileName = file.getOriginalFilename();
//        String contentType = new MimetypesFileTypeMap().getContentType(inputFileName);
//        if (contentType == null || contentType.equals("")) {
//            contentType = "image/jpeg";
//        }
//        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//        String fileType = inputFileName.substring(inputFileName.lastIndexOf(".")+1,inputFileName.length());
//
//        String destFileName = path+"/"+date+"/"+ IdUtils.simpleUUID()+"."+fileType;
//
//        upLoadFileToALiyun(destFileName, file.getInputStream(), contentType);
//
//        String urlStr = ossEndpoint.replace("http://", "http://"+bucket+".");
//
//        return urlStr+"/"+destFileName;
//    }
//
//    /**
//     * 上传图片
//     * @param file
//     * @param path
//     * @return
//     * @throws IOException
//     * @throws NoSuchAlgorithmException
//     */
//    public static String uploadAttachment(MultipartFile file, String path ,String fileType ,String fileName) throws IOException, NoSuchAlgorithmException {
//        String inputFileName = file.getOriginalFilename();
//
//
//        String contentType = new MimetypesFileTypeMap().getContentType(inputFileName);
//
//        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//
//        String destFileName = path+"/"+date+"/" +fileType;
//
//        upLoadFileToALiyun(destFileName, file.getInputStream(), contentType);
//
//        String urlStr = ossEndpoint.replace("http://", "http://"+bucket+".");
//
//        return urlStr+"/"+destFileName;
//    }
//
//    /**
//     * 上传网络图片
//     * @param src
//     * @param path
//     * @return
//     * @throws IOException
//     * @throws NoSuchAlgorithmException
//     */
//    public static String uploadFile(String src, String path) throws IOException, NoSuchAlgorithmException {
//        ByteArrayInputStream bais = downloadFile(src);
//        String inputFileName = src;
//        String contentType = new MimetypesFileTypeMap().getContentType(inputFileName);
//        if (contentType == null || contentType.equals("")) {
//            contentType = "image/jpeg";
//        }
//        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//        String fileType = inputFileName.substring(inputFileName.lastIndexOf(".")+1,inputFileName.length());
//
//        String destFileName = path+"/"+date+"/"+ IdUtils.simpleUUID()+"."+fileType;
//        try {
//            upLoadFileToALiyun(destFileName, bais, contentType);
//        }finally {
//            bais.close();
//        }
//
//        String urlStr = ossEndpoint.replace("http://", "http://"+bucket+".");
//
//        return urlStr+"/"+destFileName;
//    }
//    /**
//     * 文件上传
//     *
//     * @param myKey
//     * @param file 要上传的文件
//     */
//    public static void upLoadFileToALiyun(String myKey, File file) {
//        // 创建OSSClient实例
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        // 创建上传Object的Metadata
//        ObjectMetadata meta = new ObjectMetadata();
//
//        // 设置上传内容类型docx
//        String contentType = new MimetypesFileTypeMap().getContentType(file);
//        if (contentType == null || contentType.equals("")) {
//            contentType = "image/jpeg";
//        }
//        meta.setContentType(contentType);
//        // 设置上传文件长度
////        meta.setContentLength(file.length());
//
//        // 上传文件
//        try {
//            PutObjectResult m_Result = ossClient.putObject(bucket, myKey, file, meta);
//            System.out.println(m_Result.getETag());
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//            throw new OSSException();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//            throw new ClientException();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param myKey
//     */
//    public static void upLoadFileToALiyun(String myKey, InputStream in, String contentType) {
//        // 创建OSSClient实例
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        // 创建上传Object的Metadata
//        ObjectMetadata meta = new ObjectMetadata();
//
//        meta.setContentType(contentType);
//        if("application/pdf".equals(contentType)){
//            meta.setContentDisposition("inline");
//        }
////        // 设置上传文件长度
////        meta.setContentLength(length);
//
//        // 上传文件
//        try {
//            PutObjectResult m_Result = ossClient.putObject(bucket, myKey, in, meta);
//            System.out.println(m_Result.getETag());
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//            throw new OSSException();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//            throw new ClientException();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//    }
//
////    /**
////     * 文件下载
////     *
////     * @param myKey
////     * @param tempFileName 要下载的文件名
////     * @throws Exception
////     */
////    public static void downloadFileFromALiyun(String myKey, String tempFileName) throws Exception {
////        // 创建OSSClient实例
////        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
////        InputStream inputStream = null;
////        // 下载object到文件
////        try {
////            OSSObject ossObject = ossClient.getObject(new GetObjectRequest(bucket, myKey));
////            inputStream = ossObject.getObjectContent();
////            String newStr = new String(tempFileName.getBytes(), "UTF-8");
////            File f = new File(newStr);
////            FileUtil.inputstreamToFile(inputStream, f);
////        } catch (OSSException oe) {
////            oe.printStackTrace();
////            throw new Exception(oe.getErrorMessage());
////        } catch (ClientException ce) {
////            ce.printStackTrace();
////            throw new Exception(ce.getErrorMessage());
////        } catch (Exception e) {
////            e.printStackTrace();
////            throw new Exception(e.getMessage());
////        } finally {
////            ossClient.shutdown();// 关闭client
////            FileUtil.closeInputStream(inputStream);
////        }
////    }
//
//    // 查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
//    public static void queryObject() {
//        // 创建OSSClient实例
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        try {
//            // 要查找的文件
//            ObjectListing objectListing = ossClient.listObjects(bucket, "yourObjectKey/");
//            List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries();
//            System.out.println("您有以下Object：");
//            for (OSSObjectSummary object : objectSummary) {
//                System.out.println("\t" + object.getKey());
//            }
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//    }
//
//    // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
//    public static void deleteSingleObect(String myKey) {
//        //创建OSSClient实例
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        try {
//            ossClient.deleteObject(bucket, myKey);
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//    }
//
//    /**
//     * 批量删除object
//     */
//    public static void deleteBatchObect(List<String> keys) {
//        // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        try {
//            // 删除Objects
//            DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucket).withKeys(keys));
//            List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//    }
//
//    public static boolean doesObjectExist(String myKey) {
//        OSSClient ossClient = new OSSClient(ossEndpoint, ossAccessId, ossAccessKey);
//        boolean found = false;
//        try {
//            found = ossClient.doesObjectExist(bucket, myKey);
//        } catch (OSSException oe) {
//            oe.printStackTrace();
//        } catch (ClientException ce) {
//            ce.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            ossClient.shutdown();// 关闭client
//        }
//        return found;
//    }
//
//    public static ByteArrayInputStream downloadFile(String url) {
//        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
//        //HttpClient
//        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
//        ByteArrayOutputStream baos = null;
//        ByteArrayInputStream bais = null;
//        try {
//            HttpGet httpget = new HttpGet(url);
//
//            //伪装成google的爬虫
//            httpget.setHeader("User-Agent", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");
//            HttpResponse response = closeableHttpClient.execute(httpget);
//            baos = new ByteArrayOutputStream();
//            // 得到网络资源的字节数组,并写入文件
//            HttpEntity entity = response.getEntity();
//            if (entity != null) {
//                InputStream instream = entity.getContent();
//                try {
//                    byte b[] = new byte[1024];
//                    int j = 0;
//                    while( (j = instream.read(b))!=-1){
//                        baos.write(b,0,j);
//                    }
//                    baos.flush();
//                    baos.toByteArray();
//                    bais = convert(baos);
//                } catch (IOException ex) {
//                    // In case of an IOException the connection will be released
//                    // back to the connection manager automatically
//                    throw ex;
//                } catch (RuntimeException ex) {
//                    // In case of an unexpected exception you may want to abort
//                    // the HTTP request in order to shut down the underlying
//                    // connection immediately.
//                    httpget.abort();
//                    throw ex;
//                } finally {
//                    // Closing the input stream will trigger connection release
//                    try { instream.close(); baos.close();} catch (Exception ignore) {}
//                }
//
//            }
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {                //关闭流并释放资源
//                closeableHttpClient.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//
//        return bais;
//
//    }
//
//    public static ByteArrayInputStream convert(OutputStream out) throws Exception
//    {
//        ByteArrayOutputStream   baos=new   ByteArrayOutputStream();
//        baos=(ByteArrayOutputStream) out;
//        ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
//        return swapStream;
//    }
//
//    /**
//     * 上传excel文件
//     * @param excel
//     * @param inputFileName
//     * @return
//     * @throws IOException
//     * @throws NoSuchAlgorithmException
//     */
//    public static String uploadExcel(Workbook excel, String inputFileName) throws IOException {
//        String contentType = new MimetypesFileTypeMap().getContentType(inputFileName);
//        if (contentType == null || contentType.equals("")) {
//            contentType = "application/octet-stream";
//        }
//        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//        String fileType = inputFileName.substring(inputFileName.lastIndexOf(".")+1,inputFileName.length());
//
//        String destFileName = "admin/"+date+"/"+ IdUtils.simpleUUID()+"-"+inputFileName.substring(0, inputFileName.lastIndexOf("."))+"."+fileType;
//
//        final ByteArrayOutputStream stream = new ByteArrayOutputStream();
//        excel.write(stream);
//        final ByteArrayInputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
//
//        upLoadFileToALiyun(destFileName, inputStream, contentType);
//
//        String urlStr = ossEndpoint.replace("http://", "http://"+bucket+".");
//
//        return urlStr+"/"+destFileName;
//    }
//    /**
//     * 上传图片
//     * @param file
//     * @param path
//     * @return
//     * @throws IOException
//     * @throws NoSuchAlgorithmException
//     */
//    public static String uploadFile(File file, String path) {
//        try {
//            String inputFileName = file.getName();
//            String type = inputFileName.substring(2);
//            FileInputStream inputStream = new FileInputStream(file);
//            String contentType = new MimetypesFileTypeMap().getContentType(inputFileName);
//            if (contentType == null || contentType.equals("")) {
//                contentType = "image/jpeg";
//            }
//            if (type.equals("pdf")) {
//                contentType = "application/pdf";
//            }
//            String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//            String fileType = inputFileName.substring(inputFileName.lastIndexOf(".")+1,inputFileName.length());
//
//            String destFileName = path+"/"+date+"/"+ IdUtils.simpleUUID()+"."+fileType;
//
//            upLoadFileToALiyun(destFileName, inputStream, contentType);
//
//            String urlStr = ossEndpoint.replace("http://", "http://"+bucket+".");
//
//            return urlStr+"/"+destFileName;
//        }catch (Exception e){
//            e.printStackTrace();
//            return "";
//        }
//
//    }
//
//    public static void main(String[] args) {
//        queryObject();
//        // deleteBatchObect();
//        // System.out.println(doesObjectExist("yourObjectKey/test.doc"));
////        upLoadFileToALiyun("test1.jpg",new File("/Users/yuangaofeng/Downloads/timg.jpeg"));
//    }
//}
